part1
这里不回答机器学习是什么,能做什么,只告诉你如何快速上手。
熟悉你手中的数据。
1.常用模块导入命令
import pandas as pd
2.文件导入命令
FILE_PATH=".CSV后缀文件存放路径"
data = pd.read_csv(FILE_PATH)
3.数据探索命令。
查看数据规模
data.shape
len(data)
查看列名
data.columns
查看列名属性
data.info()
头部数据查看
data.head()
基本统计
data.describe()
其中有:平均值(mean)、标准差(std)、最小值(min)、最大值(max)以及1/4、1/2、3/4分位数(25%、50%、75%)。
筛选数据
1.缺失值处理
data = data.dropna(axis=0)
2.选出预测目标
y = data.Price
3.选出特征。特征可以理解成影响预测结果的要素。如何确定这些要素,这是后面的话题。
data_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
X = data[data_features]
建模
可以把模型理解成一个黑箱,有入口和出口,入口数据是X,出口数据是y。
1.模型方法引入
from sklearn.tree import DecisionTreeRegressor
模型的选择对预测结果的精确度有很大影响,这里我们先选择决策树模型。你只需要对该模型有个直观的印象。
2.创建和拟合
model = DecisionTreeRegressor(random_state=1)
model.fit(X,y)
random_state是为了确保每次运行都能得到相同的结果。
模型拟合后关心的问题是模型是否合适。如何度量?我们引入一个新的概念:平均绝对误差(MAE)。
平均绝对误差
1.定义:
2. 使用
模块导入
from sklearn.metrics import mean_absolute_error
预测和求MAE
predicted_price = model.predict(X)
mean_absolute_error(y,predicted_price)
细心的你可能会发现,我们在模型拟合和价格预测中用了同一份样本数据X,这显然有些不合理。一个常用的思路是将数据拆分成两部分,分别用来拟合模型和预测结果。
数据拆分
模块导入
from sklearn.model_selection import train_test_split
2.数据拆分
train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)
3.建模、预测和计算MAE
model = DecisionTreeRegressor(random_state =1)
model.fit(train_X,train_y)
val_predictions = model.predict(val_X)
print(mean_absolute_error(val_y,val_predictions))
完整代码示例
第二部分到这里就结束了,我们了解了MAE,并学会了简单的数据拆分方法,下面是完整的代码。
FILE_PATH ="C:\\Users\\Administrator\\Desktop\\kaggle\\data\\"
FILE_INDEX ="melb_data.csv"
import pandas as pd
data = pd.read_csv(FILE_PATH+FILE_INDEX)
y = data.Price
# print(y.shape)
data_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
X = data[data_features]
from sklearn.tree import DecisionTreeRegressor
# model = DecisionTreeRegressor(random_state=0)
# # print(model.fit(X,y))
# model.fit(X,y)
from sklearn.metrics import mean_absolute_error
# predicted_price = model.predict(X)
# print(mean_absolute_error(y,predicted_price))
from sklearn.model_selection import train_test_split
train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)
model = DecisionTreeRegressor(random_state =1)
model.fit(train_X,train_y)
val_predictions = model.predict(val_X)
print(mean_absolute_error(val_y,val_predictions))
这部分依旧是对模型验证的讨论。我们会接触到两个新的概念:过拟合(underfitting)和欠拟合(overfitting)。
非官方解释
大白话解释起来就是:照顾数据中的大多数,忽略极少数,这是一种好的拟合;企图去迎合全部数据导致模型预测出现很大偏差,这就是过拟合;仅仅迎合一小部分而忽视大多数,这就是欠拟合。权威解释自行百度。
模拟实验
你需要知道:
在scikit-learn 文档中,决策树模型有许多可选配置项,很多重要的配置项都对树的高度(深度)有影响。这里我们只关注参数:max_leaf_nodes。
实验原理:
通过改变max_leaf_nodes的值来比较MAE大小,从而选择出较适合的参数值。在这个过程中,参数值的改变会导致模型欠拟合或是过拟合。
完整代码示例:
FILE_PATH ="C:\\Users\\Administrator\\Desktop\\kaggle\\data\\"
FILE_INDEX ="melb_data.csv"
import pandas as pd
data = pd.read_csv(FILE_PATH+FILE_INDEX)
filtered_data = data.dropna(axis=0)
data_features =['Rooms', 'Bathroom', 'Landsize', 'BuildingArea',
'YearBuilt', 'Lattitude', 'Longtitude']
X = filtered_data[data_features]
y = filtered_data.Price
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error
def get_mae(max_leaf_nodes,train_X,val_X,train_y,val_y):
model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes,random_state=0)
model.fit(train_X,train_y)
preds_val = model.predict(val_X)
mae = mean_absolute_error(val_y,preds_val)
return(mae)
from sklearn.model_selection import train_test_split
train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)
# compare MAE with differing values of max_leaf_nodes
for max_leaf_nodes in [5,50,500,5000]:
my_mae = get_mae(max_leaf_nodes,train_X,val_X,train_y,val_y)
print("Max leaf nodes: %d \t\t Mean Absolute Error: %d" %(max_leaf_nodes, my_mae))
结果图示:
显然500是最佳的参数值。这一部分我们学会了通过比较MAE来确定较合适的参数值,也知道了参数值的不同可能会造成模型过拟合或者欠拟合。下一部分我们回到数据本身,探讨对原始数据的处理。